#!/usr/bin/env python
# -*- coding: utf-8 -*-

def yuki_function():
    print unicode('这是一个无返回值无传入值的方法', 'utf-8')

def mark_function(string_mark):
    print unicode('这是一个有传入值无返回值的方法,传入值为:', 'utf-8'), string_mark

def add_function(a, b):
    if isinstance(a, (int)):    # 使用isinstance（）方法来判断传进来的变量类型
        c = str(a)
    if isinstance(b, (int)):
        d = str(b)

    print c + d

def fibs(n):    # 斐波那契数列
    result = [0, 1]
    for i in range(n - 2):
        result.append(result[-2] + result[-1])
    return result

x = 5   # 全局变量

def funcx():
    global x    # 这句话的意思是在声明 x 是全局变量，也就是说这个 x 跟函数外面的那个 x 是同一个
    x = 2
    print "this x is in the funcx:-->",x

def func(y, *args): # 以元组tuple的方式存储传入的数据
    print 'y = ', y
    result = y
    print 'args = ', args
    for i in args:
        result += i
    return result

def foo(**kargs):   # 以字典dict的方式存储传入的数据
    print kargs

if __name__ == "__main__":
    yuki_function()

    mark_function('Yuki is you')
    add_function(2, 3)

    lst = fibs(10)
    print lst

    funcx()
    print "this x is out of the funcx:-->", x

    print func(1, 2, 3, 4, 5, 6, 7, 8, 9)

    foo(m = 168, a = 188, r = 198, k = 518) #传入的格式要以dict格式为准

    '''lambda函数的使用:lambda arg1, arg2, ...argN : expression using arguments
    在 lambda 后面直接跟变量
    变量后面是冒号
    冒号后面是表达式，表达式计算结果就是本函数的返回值'''

    lam = lambda l:l + 3
    lam2 = lambda k, j:k + j
    print lam(10)
    print lam2(8, 10)

    '''map()函数使用:map(func,seq)
    func 是一个函数，seq 是一个序列对象'''
    numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    print map(lambda x: x+3,numbers)

    '''reduce()函数使用
    等同于将传入的数值从左至右逐个元素进行运算'''
    print reduce(lambda r, e: r + e, [1,2,3,4,5]) # 运算过程为: （（（（1+2）+3）+4）+5）

    '''filter函数使用'''
    number = range(-5, 5)
    print filter(lambda x: x>0, number) # 打印出number中大于0的数字
    print [x for x in number if x > 0]  # 与上面那句等价
    print filter(lambda c:c!='i', 'iloveyou')   # 这一句为啥一个c!='i'就可以把i去掉我还没明白